
<%
	//Info jsp
	/** 
	 *  
	 * @author Alessandro  Nasso
	 * @version  1.0
	 */
%>

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1" 
	import="java.lang.*" 
	import="java.sql.*"
	import="java.io.*" 
	import="java.util.*"
	import="java.text.SimpleDateFormat" 
	import="beans.Parallel"
	import="java.util.Date" 
	import="beans.Query1"
	import="java.sql.Connection"%>

<jsp:useBean id="ris" scope="session" class="beans.StorageBean" />
<jsp:useBean id="dbConn" scope="session" class="beans.Query1" />


<%!
	private void updateData(Query1 dbConnection, String query, HttpServletRequest request) {
		try {
			//Se la query al db non ha prodotto risultati faccio la query ad Opodo
			//richiamo l'istanza di parallel che mantiene una connessione persistente al server di Opodo
			Parallel parReq = new Parallel();
			SimpleDateFormat  format = new SimpleDateFormat("dd-MM-yyyy", Locale.ITALY);
			format.setLenient(false);
			Date date = null;
			if(request.getParameter("mese")!=null)
				date = format.parse("01-"+request.getParameter("mese")+"-"+request.getParameter("anno"));
			if(request.getParameter("data")!=null)
				date = format.parse(request.getParameter("data"));
			Calendar calData = format.getCalendar();
			calData.setTimeInMillis(date.getTime());
			int month = calData.get(Calendar.MONTH);
			
			//effettuo la richiesta al server remoto
			String ad, aa, cd, ca, nd, na;
			ArrayList<String> aeroportiPartenza = new ArrayList<String>();
			ArrayList<String> aeroportiDestinazione = new ArrayList<String>();
			ad = request.getParameter("ad");
			aa = request.getParameter("aa");
			cd = request.getParameter("cd");
			ca = request.getParameter("ca");
			nd = request.getParameter("nd");
			na = request.getParameter("na");
			
			//Partenza
			if ((ad != null) && (ad.compareTo("null") != 0)	&& (ad.compareTo("") != 0)) {
				aeroportiPartenza.add(ad);
			} else if ((cd != null) && (cd.compareTo("null") != 0) && (cd.compareTo("") != 0)){
				String allCity;
				allCity = "Select codice_aeroporto "+
						  "From autocomplete "+
						  "Where citta = '"+cd+"'";
				ResultSet citta = dbConnection.executeQuery(allCity);
				while (citta.next()){
					aeroportiPartenza.add(citta.getString(1));
				}
				citta.close();
			} else if ((nd != null) && (nd.compareTo("null") != 0) && (nd.compareTo("") != 0)) {
				String allNation;
				allNation = "Select codice_aeroporto "+
						  "From autocomplete "+
						  "Where nazione = '"+nd+"'";
				ResultSet nazioni = dbConnection.executeQuery(allNation);
				while (nazioni.next()){
					aeroportiPartenza.add(nazioni.getString(1));
				}
				nazioni.close();
			}
			//Destinazione
			if ((aa != null) && (aa.compareTo("null") != 0)	&& (aa.compareTo("") != 0)) {
				aeroportiDestinazione.add(aa);
			} else if ((ca != null) && (cd.compareTo("null") != 0) && (ca.compareTo("") != 0)){
				String allCity;
				allCity = "Select codice_aeroporto "+
						  "From autocomplete "+
						  "Where citta = '"+ca+"'";
				ResultSet citta = dbConnection.executeQuery(allCity);
				while (citta.next()){
					aeroportiDestinazione.add(citta.getString(1));
				}
				citta.close();
			} else if ((nd != null) && (nd.compareTo("null") != 0) && (nd.compareTo("") != 0)) {
				String allNation; 
				allNation = "Select codice_aeroporto "+
						  "From autocomplete "+
						  "Where nazione = '"+na+"'";
				ResultSet nazioni = dbConnection.executeQuery(allNation);
				while (nazioni.next()){
					aeroportiDestinazione.add(nazioni.getString(1));

				}
				nazioni.close();
			}
			//Richiesta parallela
			if(request.getParameter("mese")!=null){
				//Richiesta per mese
				Calendar today = Calendar.getInstance();
				if((today.get(Calendar.YEAR)==calData.get(Calendar.YEAR))&&(today.get(Calendar.MONTH)==calData.get(Calendar.MONTH))){
					calData.set(Calendar.DAY_OF_MONTH, today.get(Calendar.DAY_OF_MONTH));
				}
				while(calData.get(Calendar.MONTH)==month){
					for(int i=0; i<aeroportiPartenza.size(); i++){
						for(int j=0; j<aeroportiDestinazione.size(); j++){
							parReq.parallelRequest(	
									aeroportiPartenza.get(i), 
									aeroportiDestinazione.get(j), 
									String.valueOf(calData.get(Calendar.MONTH)+1), 
									String.valueOf(calData.get(Calendar.DAY_OF_MONTH)), 
									String.valueOf(calData.get(Calendar.YEAR))
							);
						}
					}
					calData.add(Calendar.DAY_OF_MONTH, 1);
				}
			} else {
				//Richiesta per data
				for(int i=0; i<aeroportiPartenza.size(); i++){
					for(int j=0; j<aeroportiDestinazione.size(); j++){
						parReq.parallelRequest(	
								aeroportiPartenza.get(i), 
								aeroportiDestinazione.get(j), 
								String.valueOf(calData.get(Calendar.MONTH)+1), 
								String.valueOf(calData.get(Calendar.DAY_OF_MONTH)), 
								String.valueOf(calData.get(Calendar.YEAR))
						);
					}
				}
			}
		} catch (Exception e) {
			System.err.println("Errore in gestore_query.jsp (updateData())");
			e.printStackTrace();
		}
	}

%>

<%
	String richiesta = request.getAttribute("prelievo").toString();
	String query = request.getAttribute("query").toString();
	
	// se è richiesto un prelievo dei dati
	if (richiesta.compareTo("true") == 0) {
// 		ris.setMatr(dbConn.getDati(query));
		if((request.getParameter("data")!=null)||(request.getParameter("mese")!=null)){
			//Ricerca parallela
			updateData(dbConn, query, request);
		}
		
	} else {
		dbConn.executeUpdate(query);
	}
	
%>

